package com.ygq.controller;

import BO.AddFillEmptyAnswersBO;
import DTO.*;
import Exceptions.QuestionNumberExistedException;
import com.ygq.FillEmptyQuestionService;
import com.ygq.JudgeQuestionService;
import com.ygq.WorkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import result.PageResult;
import result.Result;

import java.util.List;
import java.util.Objects;

@RestController
@RequestMapping("/teacher/FillEmpty")
public class FillEmptyQuestionController {

    // 代码片段保存地址
    @Value("${ygq.path_fill_empty_code}")
    private String path;

    @Autowired
    private FillEmptyQuestionService fillEmptyQuestionService;

    @Autowired
    private WorkService workService;
    /**
     * 分页查询
     * @param pageFillEmptyQuestionDTO 这里使用判断题的DTO来接收数据，因为选择题的章节id设计时未设计好
     * @return
     */
    @PostMapping("/getFillEmptyQuestion")
    public Result<PageResult> getJudgeQuestion(@RequestBody PageJudgeQuestionDTO pageFillEmptyQuestionDTO){
        PageResult pageResult = fillEmptyQuestionService.page(pageFillEmptyQuestionDTO);
        return Result.success(pageResult);
    }


    /**
     * 添加题目
     * @param addFillEmptyDTO
     * @return
     */
    @PostMapping("/addQuestion")
    public Result<String> addQuestion(@RequestBody AddFillEmptyDTO<AddFillEmptyAnswersBO> addFillEmptyDTO){

        for (int i = 0; i < addFillEmptyDTO.getAnswers().size(); i++) {
            if (addFillEmptyDTO.getAnswers().get(i).getOrder()!=i+1){
                return Result.error("错误");
            }
        }
        //首先，检验数据的合法性
        // 1. 编号是否重复
        List<String> questionNumber =  fillEmptyQuestionService.getQuestionNumber();
        for (String s : questionNumber) {
            if (Objects.equals(addFillEmptyDTO.getQuestionNumber(), s)){
                throw new QuestionNumberExistedException();
            }
        }
        fillEmptyQuestionService.addQuestion(addFillEmptyDTO,path);
        return Result.success("添加成功");
    }

    /**
     * 修改题目
     * @return
     */
    @PostMapping("/updateQuestion")
    public Result<String> updateQuestion(@RequestBody UpdateFillEmptyQuestionDTO updateFillEmptyQuestionDTO){
        // 两次调用service，第一次调用是用于检验数据的合法信和数据是否有冲突
        if (fillEmptyQuestionService.check(updateFillEmptyQuestionDTO)==1){
            return Result.error("该题目关联了试卷，不能删除",512);
        }
        // 第二次调用用于执行更新操作
        fillEmptyQuestionService.updateQuestion(updateFillEmptyQuestionDTO,path);
        return Result.success("修改成功");
    }

    /**
     * 删除题目
     * @param id
     * @return
     */
    @DeleteMapping("/deleteFillEmpty")
    public Result<String> deleteFillEmpty(Integer id){
        // 第一步，先检验是否关联试卷
        // 0 表示未关联 1表示关联
        if (workService.getIsRelevancyWork(id) == 1){
            return Result.error("该题目关联了试卷，不能删除",512);
        }
        fillEmptyQuestionService.deleteById(id);
        return Result.success("ok");
    }
}
